import { IPSSysEAIElement } from './ipssys-eaielement';
import { IPSSysEAIElementAttr } from './ipssys-eaielement-attr';
import { IPSSysEAIElementRE } from './ipssys-eaielement-re';
import { PSModelObjectImpl } from '../psmodel-object-impl';

export class PSSysEAIElementImpl extends PSModelObjectImpl implements IPSSysEAIElement {
  protected allpssyseaielementattrs: IPSSysEAIElementAttr[] | null = null;

  getAllPSSysEAIElementAttrs(): IPSSysEAIElementAttr[] | null {
    if (this.allpssyseaielementattrs == null) {
      this.allpssyseaielementattrs = this.fillChildListModel(this.M.getAllPSSysEAIElementAttrs, 'eai.IPSSysEAIElementAttr') as IPSSysEAIElementAttr[];
    }
    return this.allpssyseaielementattrs;
  }

  get allPSSysEAIElementAttrs(): IPSSysEAIElementAttr[] | null {
    return this.getAllPSSysEAIElementAttrs();
  }

  findPSSysEAIElementAttr(objKey: any): IPSSysEAIElementAttr | null {
    return this.getPSModel5('eai.IPSSysEAIElementAttr', this.getAllPSSysEAIElementAttrs(), objKey) as IPSSysEAIElementAttr;
  }

  protected allpssyseaielementres: IPSSysEAIElementRE[] | null = null;

  getAllPSSysEAIElementREs(): IPSSysEAIElementRE[] | null {
    if (this.allpssyseaielementres == null) {
      this.allpssyseaielementres = this.fillChildListModel(this.M.getAllPSSysEAIElementREs, 'eai.IPSSysEAIElementRE') as IPSSysEAIElementRE[];
    }
    return this.allpssyseaielementres;
  }

  get allPSSysEAIElementREs(): IPSSysEAIElementRE[] | null {
    return this.getAllPSSysEAIElementREs();
  }

  findPSSysEAIElementRE(objKey: any): IPSSysEAIElementRE | null {
    return this.getPSModel5('eai.IPSSysEAIElementRE', this.getAllPSSysEAIElementREs(), objKey) as IPSSysEAIElementRE;
  }

  get codeName(): string {
    return this.M.codeName;
  }

  get dynaModelFilePath(): string {
    return this.M.dynaModelFilePath;
  }

  get elementTag(): string {
    return this.M.elementTag;
  }

  get elementTag2(): string {
    return this.M.elementTag2;
  }

  get elementType(): 'COMPLEX' | 'ELEMENTGROUP' | 'ATTRIBUTEGROUP' {
    return this.M.elementType;
  }

  get memo(): string {
    return this.M.memo;
  }

  get name(): string {
    return this.M.name;
  }

  get orderMode(): 'ALL' | 'CHOICE' | 'SEQUENCE' {
    return this.M.orderMode;
  }

  get userCat(): string {
    return this.M.userCat;
  }

  get userTag(): string {
    return this.M.userTag;
  }

  get userTag2(): string {
    return this.M.userTag2;
  }

  get userTag3(): string {
    return this.M.userTag3;
  }

  get userTag4(): string {
    return this.M.userTag4;
  }

  get cls(): string {
    return 'PSSysEAIElementImpl';
  }

  instanceof(cls: string): boolean {
    if (cls == 'eai.IPSEAIElement' || cls == 'eai.IPSSysEAIElement') return true;
    return super.instanceof(cls);
  }
}
